package monitormercado.apresentacao.comum;

import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

public abstract class TabelaDados {
	
	protected Group painel = null;
	protected Table tabela = null;
	protected String[] titulosColunas = null;
	
	public TabelaDados(Composite container, String[] titulosColunas, int numLinhasDefault, int larguraDefault) {
		this.titulosColunas = titulosColunas;
		
		painel = new Group(container, SWT.NONE);
		painel.setText("Resultados de pesquisa");
		
		criarTabela();
		
		int j = larguraDefault/tabela.getColumnCount();
		String emBranco = criarStringVazia(j/2);
		for (int i = 0; i < numLinhasDefault; i++) {
			TableItem item = new TableItem (tabela, SWT.NONE);
			item.setText(0, emBranco);
			item.setText(1, emBranco);
		}
		
		for (int i=0; i < tabela.getColumnCount(); i++) {
			tabela.getColumn (i).pack ();
		}
		
		tabela.pack();
		painel.pack();
		
	}
	
	protected abstract void preencher(List dados); 
		
	public void setLocation(int x, int y) {
		painel.setLocation(x, y);
	}

	protected void criarTabela() {
		tabela = new Table(painel, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
		tabela.setLinesVisible(true);
		tabela.setHeaderVisible(true);
		tabela.setLocation(0,20);
		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
		data.heightHint = 200;
		
		tabela.setLayoutData(data);
		
		if (titulosColunas != null) {
			for (int i = 0; i < titulosColunas.length; i++) {
				TableColumn coluna = new TableColumn (tabela, SWT.NONE);
				coluna.setText (titulosColunas [i]);
			}	
		}
	}
	
	private String criarStringVazia(int numCaracteres) {
		char[] caracteres = new char[numCaracteres];
		for (int i = 0; i < numCaracteres; i++) {
			caracteres[i] = ' ';
		}
		return new String(caracteres);
	}
	
	public Group getPainel() {
		return painel;
	}

	public void setPainel(Group painel) {
		this.painel = painel;
	}

	public Table getTabela() {
		return tabela;
	}

	public void setTabela(Table tabela) {
		this.tabela = tabela;
	}

	public String[] getTitulosColunas() {
		return titulosColunas;
	}
	
	public void setTitulosColunas(String[] titulosColunas) {
		this.titulosColunas = titulosColunas;
	}
	
}
